<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      /*
      结论
        如果是.then那么记得return 才能够控制顺序.因为promise的then如果返回值是promise的话
        这个then的状态取决于该promise的值,人话就是这个执行完了才知道下一个then走那个回调
        才知道返回值是啥.否则控制不了顺序,异步正常进异步队列了,不等了返回undefined走成功回调了.

        如果是async那么天然返回一个promise,所以这块遇见一个await就要等这个promise执行完了才继续执行下一步.
        如果里面的函数都是用async去操作的那么可以同步的这样去使用,前提是内部是使用的await去控制的顺序.但是如果有的又是then那么要return这个用then处理的逻辑
        才能控制
        总而言之确保是一个promise就可以用该promise状态去控制顺序.否则不行
        await 后面是异步前面是同步,这点要记住
       */

      let p = new Promise((resolve, reject) => {
        resolve("成功");
      });
      let p2 = new Promise((resolve, reject) => {
        setTimeout(() => {
          resolve("延迟成功");
        });
      });
      //测试1
      // Promise.resolve("立即成功")
      //   .then((value) => {
      //     console.log(value);
      //     return p2.then((res) => {
      //       console.log(res);
      //     });
      //   })
      //   .then((res) => {
      //     p.then((res) => {
      //       console.log(res);
      //     });
      //   });

      // Promise.resolve("立即成功1")
      //   .then((value) => {
      //     console.log(value);
      //     return p2.then((res) => {
      //       console.log(res + "1");
      //     });
      //   })
      //   .then((res) => {
      //     p.then((res) => {
      //       console.log(res + "1");
      //     });
      //   });
      //测试2
      // const one = async () => {
      //   let one = await p;
      //   console.log(one);
      // };
      // const two = async () => {
      //   let p = await p2;
      //   console.log(p);
      // };
      // const three = async () => {
      //   await two();
      //   one();
      // };
      //测试3
      // const one = () => {
      //   p.then((res) => {
      //     console.log(res);
      //   });
      // };
      // const two = () => {
      //   return p2.then((res) => {
      //     console.log(res);
      //   });
      // };
      // const three = async () => {
      //   await two();
      //   one();
      // };
      // 测试4
      // const one = () => {
      //   console.log(1);
      // };
      // const two = async () => {
      //   await 1;
      //   console.log(2);
      // };
      // const three = async () => {
      //   await two();
      //   one();
      // };
      // three();
      // console.log(3);
    </script>
  </body>
</html>
